/**
 * Modelisation d'une entite definie par son nom, et sa position.
 *
 * On implemente egalement la methode deplacement qui sera redefinie
 * dans la classe fille Cellule
 *
 * @param {String} nom Nom de l'entite
 * @param {Number} x Abscisse de l'entite
 * @param {Number} y Ordonnee de l'entite
 */
function Entite(nom, x, y){
    /**
     * Nom de l'entite
     *
     * @type {String}
     */
    this.nom = nom;
    /**
     * Abscisse de l'entite
     *
     * @type {Number}
     */
    this.x = x;
    /**
     * Ordonnee de l'entite
     *
     * @type {Number}
     */
    this.y = y;
    /**
     * Position de l'entite
     *
     * @type {Object}
     */
    this.position = new Position(this.x, this.y);
    
    /**
     * Methode qui retourne la distance de l'entite par rapport au point
     * donne en parametre.
     *
     * @param {Number} px Abscisse du point distant
     * @param {Number} py Ordonnee du point distant
     * @return {Float} Distance entre les deux points
     */
    this.distance = function(px, py){
        return Math.sqrt(Math.pow((px - this.x), 2) + Math.pow((py - this.y), 2));
    };
    
    /**
     * Methode qui permet de recuperer les nouvelles
     * coordonnees de l'entite
     */
    this.deplacement = function(){
        this.position.seDeplace();
        this.x = this.position.getX();
        this.y = this.position.getY();
    };
    
    /**
     * La methode evolue appelle en premier lieu la methode deplacement
     * qui permet de faire bouger l'entite ou elle devait aller.
     */
    this.evolue = function(){
        this.deplacement();
    };
    
    /**
     * Methode qui retourne une chaine correspondant au type de l'entite
     * dont le nom est passe en parametre
     *
     * @param {Object} nomEntite Nom de l'entite
     * @return {String} Type de l'entite
     */
    this.getTypeEntite = function(typeEntite){
        switch (typeEntite) {
            case 'Brasseryte':
            case 'Kommyte':
            case 'Polakocyte':
            case 'Samuelocyte':
            case 'Zimbabwyte':
                return 'Cellule';
                break;
            case 'Bretoine':
            case 'Carottoine':
            case 'Haricoine':
            case 'Kiwine':
            case 'Mongoloine':
            case 'Oppiomine':
            case 'Pommine':
                return 'Molecule';
                break;
            case 'Acetone':
            case 'Acide sulfurique':
            case 'Benzene':
            case 'Eau':
            case 'Ethanol':
                return 'Cc';
                break;
            default:
                alert('Entite : typeEntite inconnu !');
                break;
        }
        return null;
    };
}
